# coding=utf-8
# 注册功能后台实现
from . import api

from flask import request,current_app,jsonify,session

from iHome import redis_store,db


from iHome.utils.response_code import RET


from iHome.models import User



# 写用户登录的接口，创建用户登录的路由
@api.route("/session",methods=["POST"])
def login():

    # 1，获取数据
    data_dict=request.json
    mobile=data_dict.get("mobile")
    password=data_dict.get("password")
    # 判断数据是否完整
    if not all([mobile,password]):
        return jsonify(errno=RET.PARAMERR,errmsg="数据不完整")


    # 2，超赵对应手机号用户，查询数据库，判断用户是否存在
    try:
        user = User.query.filter_by(mobile=mobile).first()

    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="数据查询错误")

    if not user:
        return jsonify(errno=RET.DATAEXIST,errmsg="用户不存在")

    # 3，校验密码,这里需要到dodels.py当中去给用户模型User添加属性，校验密码的属性
    if not user.check_password(password):
        return jsonify(errno=RET.PWDERR,errmsg="用户名或者密码错误")


    # 4，保存登录状态：：：后面需要用到用户的登录状态
    session["name"]=user.name
    session["mobile"]=user.mobile
    session["user_id"]=user.id

    # 5，返回结果
    return jsonify(errno=RET.OK,errmsg="登录成功")




# 实现注册功能的后台路由以及视图
@api.route("/users",methods=["POST"])
def register():
    """
    1,获取参数并判断是否有值
    2，取到本地验证码
    3，将本地的验证码和传入的验证码进行对比，如果一样
    4，创建用户模型，并设置数据，并添加到数据库
    5，返回结果
    :return:
    """
    # 1 获取参数并判断是否有值
    data_dict=request.json
    mobile=data_dict.get("mobile")
    phonecode=data_dict.get("phonecode")
    password=data_dict.get("password")

    if not all([mobile,phonecode,password]):
        return jsonify(errno=RET.PARAMERR,errmsg="参数不全")

    # 2，取到本地的验证码
    try:
        sms_code=redis_store.get("SMS_"+mobile)
        redis_store.delete("SMS_"+mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="本地验证码获取失败")


    if not sms_code:
        return jsonify(errno=RET.NODATA,errmsg="短信验证码过期")

    # 3，将本地验证码和传入的验证码进行对比，如果一样
    if phonecode != sms_code:
        return jsonify(errno=RET.DATAERR,errmsg="短信验证码错误")

    # 4，创建用户模型，并设置数据，并添加到数据库
    user=User()
    #设置数据
    user.name=mobile
    user.mobile=mobile
    user.passwoed=password
    # 保存用户数据
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="保存数据失败")

    # 保存登录状态：：：后面需要用到用户的登录状态
    session["name"]=mobile
    session["mobile"]=mobile
    session["user_id"]=user.id

    #5返回结果
    return jsonify(errno=RET.OK,errmsg="注册成功")


























